# 云胡的编程周报第 003 期

时间:2023/8/28 - 2023/9/3

# 一、点滴记录

  1. 使用 BeanUtils.copyProperties(Object source, Object target)拷贝时,要先判断 source不为空。

  2. 使用 lint-md 对某个文件夹底下的所有 md 文件进行内容格式化

    lint-md essay/**/* --fix
    
    1
  3. 为数据库中的表添加唯一索引

    alter table user add unique index(username, sex); # 对用户表的用户名和性别做唯一索引
    
    1
  4. 唯一索引和 Mybatis Plus 的逻辑删除会冲突,我这边的解决方式是直接删了逻辑删除,简单暴力。

  5. Vue 使用路由懒加载会更高效

    {
        name: 'UtilIndex',
        path: '/utilIndex',
        component: ()=>import("@/components/UtilIndex")
    }
    
    1
    2
    3
    4
    5
  6. 使用 LambdaUpdateWrapper来更新记录,避免硬编码。

    LambdaUpdateWrapper<SysUserEntity> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
    lambdaUpdateWrapper
            .eq(SysUserEntity::getPhone, phone)
            .set(SysUserEntity::getToken, token);
    return sysUserMapper.update(null, lambdaUpdateWrapper);
    
    1
    2
    3
    4
    5
  7. jwt 生成的 token 是一次性的,在 jwt 里面设置了过期时间,这个时间就固定写死了,过期时间是无法延后的,因此无法实现 token 的自动续期,要想自动续期只能重新生成一个新的 token,不推荐。

    redis 数据的 key 我用了用户名,value 是用户信息,用户信息中带有 token

    使用 redis 的过期时间来实现 token 的续期,如果用户某个请求距离 redis 这条数据的过期时间小于 1 小时,那么重新设置延后这条 redis 的过期时间,从而达到 token 的自动续期。这里的 1 小时只是个例子,可以自己定义。

    判断 redis 剩余生存时间前一定要先判断这个 key 是否存在。

    serializableRedisTemplate.hasKey(key) 判断键是否存在。

    @Autowired
    private RedisTemplate<String, Serializable> serializableRedisTemplate;
    
    public boolean enlargeTokenTime(String key, long expireTime) {
        if (StrUtil.isNotBlank(key) && Boolean.TRUE.equals(serializableRedisTemplate.hasKey(key))) {
            Long currentExpireTime = serializableRedisTemplate.getExpire(key, TimeUnit.HOURS);
            if (Objects.nonNull(currentExpireTime) && (currentExpireTime <= 1)) {
                // 重新设置 key 的过期时间            
                serializableRedisTemplate.expire(key, expireTime, TimeUnit.HOURS);
                return true;
            }
        }
        return false;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
  8. 查看 nginx 监听了哪几个端口

    lsof -i:80	# nginx 在 80 端口,先查看它的进程 PID
    # netstat 命令查看本机的网络连接和后门
    # a 表示列出所有状态,n 表示使用 IP 和端口号,p 表示列出 PID 和程序的文件名
    # grep 可以根据输入文本匹配,支持简单的模式和正则
    netstat -anp | grep pid 
    
    1
    2
    3
    4
    5
    root@VM-12-16-debian:~# lsof -i:80
    COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
    nginx   3004144 root   10u  IPv4 781968082      0t0  TCP *:http (LISTEN)
    nginx   3004144 root   11u  IPv6 781968083      0t0  TCP *:http (LISTEN)
    nginx   3004145 root   10u  IPv4 781968082      0t0  TCP *:http (LISTEN)
    nginx   3004145 root   11u  IPv6 781968083      0t0  TCP *:http (LISTEN)
    nginx   3004146 root   10u  IPv4 781968082      0t0  TCP *:http (LISTEN)
    nginx   3004146 root   11u  IPv6 781968083      0t0  TCP *:http (LISTEN)
    root@VM-12-16-debian:~# netstat -anp | grep 3004144
    tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      3004144/nginx: mast 
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3004144/nginx: mast 
    tcp        0      0 0.0.0.0:9049            0.0.0.0:*               LISTEN      3004144/nginx: mast 
    tcp        0      0 0.0.0.0:9050            0.0.0.0:*               LISTEN      3004144/nginx: mast 
    tcp        0      0 0.0.0.0:8765            0.0.0.0:*               LISTEN      3004144/nginx: mast 
    tcp6       0      0 :::80                   :::*                    LISTEN      3004144/nginx: mast 
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

可以看到我这边监听了 9000904990508765等端口。

# 二、新发现

  1. 自动生成 vuepress 侧边栏。

    https://shanyuhai123.github.io/vuepress-plugin-auto-sidebar/zh/ (opens new window)

  2. 一个正则表达式测试网站,可以更改成中文界面。

    https://regex101.com/ (opens new window)

  3. 字节跳动开源图标库

    https://iconpark.oceanengine.com/home (opens new window)

  4. java 爬虫框架 webmagic

    https://webmagic.io/docs/zh/ (opens new window)

  5. shell 命令行的解释

    https://www.shell.how/ (opens new window)

    哈哈哈哈,git 是一个愚蠢的内容跟踪工具。